package com.student.Activitys.activity;

import android.graphics.Bitmap;
import android.graphics.Color;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.provider.MediaStore;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.widget.ImageView;
import android.widget.ScrollView;
import android.widget.TextView;

import com.afollestad.materialdialogs.DialogAction;
import com.afollestad.materialdialogs.MaterialDialog;
import com.commit451.nativestackblur.NativeStackBlur;
import com.facebook.drawee.view.SimpleDraweeView;
import com.google.gson.Gson;
import com.student.Activitys.R;
import com.student.Activitys.activity.base.BaseActivity;
import com.student.Activitys.adapter.MyListAdapter;
import com.student.Activitys.adapter.base.BaseRecyleViewAdapter;
import com.student.Activitys.bean.MyListBean;
import com.student.Activitys.bean.UserBean;
import com.student.Activitys.utils.Constant;
import com.student.Activitys.utils.FrescoUtils;
import com.student.Activitys.utils.ImageUtils;
import com.student.Activitys.utils.JumperUtils;
import com.student.Activitys.utils.ToastUtils;
import com.student.Activitys.view.recyleview.FullyLinearLayoutManager;
import com.zhy.autolayout.AutoRelativeLayout;

import org.simple.eventbus.EventBus;
import org.simple.eventbus.Subscriber;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import butterknife.Bind;
import butterknife.ButterKnife;
import butterknife.OnClick;

/**
 * 项目名称：
 * 类描述：我的
 * 创建人：张飞祥
 * 创建时间：2017/9/18 11:16
 * 修改人：张飞祥
 * 修改时间：2017/9/18 11:16
 * 修改备注：
 */
public class MyActivity extends BaseActivity {

    @Bind(R.id.tv_title)
    TextView tvTitle;
    @Bind(R.id.iv_return)
    ImageView ivReturn;
    @Bind(R.id.iv_my_top_bg)
    ImageView ivMyTopBg;
    @Bind(R.id.sv_my_top_user_icon)
    SimpleDraweeView svMyTopUserIcon;
    @Bind(R.id.tv_my_top_user_name)
    TextView tvMyTopUserName;
    @Bind(R.id.tv_my_top_user_major)
    TextView tvMyTopUserMajor;
    @Bind(R.id.rv_my_list)
    RecyclerView rvMyList;
    @Bind(R.id.sv_home)
    ScrollView svHome;
    @Bind(R.id.layout_my_top)
    AutoRelativeLayout layoutMyTop;
    @Bind(R.id.iv_my_identity)
    ImageView ivMyIdentity;

    //列表图标
    private int[] icons = {R.drawable.act_my_info_icon, R.drawable.act_my_pwd_icon,
            R.drawable.act_my_info_history_icon, R.drawable.act_my_schedule_icon, R.drawable.act_my_bursary_icon,
            R.drawable.act_my_party_icon, R.drawable.act_my_leave_icon};
    //列表文字
    private String[] names = {"个人信息", "密码修改", "历史推送", "课表查询", "奖学金申请",
            "入党申请查询", "我的请假"};
    //列表 数据集合
    private List<MyListBean> list = null;
    //列表 适配器
    private MyListAdapter adapter = null;

    //当前用户实体
    private UserBean user = null;
    //当前身份
    private String identity = null;
    //当前 用户头像地址
    private String stuIconUrl = null;
    //当前 用户头像是否传递到裁剪页面
    private boolean stuSimpleFlag = false;
    @Override
    protected void initUI() {
        setContentView(R.layout.act_my);
        //标题
        tvTitle.setText("我的");
        /**
         * 解决滑动冲突
         */
        //rv设置不获取焦点
        rvMyList.setNestedScrollingEnabled(false);
        rvMyList.setFocusable(false);
        //ScrollView 置顶
        svHome.smoothScrollTo(0, 0);
        svHome.setFocusable(true);
    }

    @Override
    protected void initData() {

        /**
         * 创建 Gson 解析储存的用户数据 反填 界面数据
         */
        Gson gson = new Gson();
        user = gson.fromJson(mACache.getAsJSONObject(Constant.USER) + "", UserBean.class);
        //设置用户 名字
        tvMyTopUserName.setText(user.getStuName());
        //设置用户 班级
        tvMyTopUserMajor.setText(user.getXZBJ());
        /**
         * 判断当前是什么身份
         */
        //获取本地存储的 身份标识
        identity = mACache.getAsString(Constant.USER_IDENTITY);
        //是否为新生
        if (identity.equals(Constant.IDENTITY_NEWBORN)) {
            ivMyIdentity.setImageResource(R.drawable.ic_my_new_student);
        } else {
            ivMyIdentity.setImageResource(R.drawable.ic_my_stay_student);
        }
        /**
         * 加载头像
         */
        //获取学生头像
        stuIconUrl = user.getImg_url();
        //判断当前头像是否为空
        if(stuIconUrl != null && !stuIconUrl.equals("")){
            /**
             * 判断是否为默认头像
             *  ps：这个头像名称，服务器不能变的 要不客户端判断不了是否为默认头像
             */
            String stuDefault = stuIconUrl.substring(stuIconUrl.length()-14,stuIconUrl.length());
            if (stuDefault.equals("StuDefault.png")){
                //设置默认头像
                FrescoUtils.loadLocalImage(R.drawable.ic_user_default, svMyTopUserIcon);
                //设置默认背景
                ivMyTopBg.setImageResource(R.drawable.ic_user_bg_default);
            }else{
                //加载网络的头像
                initSetHttpUserIcon(stuIconUrl);
                //设置可以传递到裁剪页面
                stuSimpleFlag = true;
            }
        } else {
            //设置默认头像
            FrescoUtils.loadLocalImage(R.drawable.ic_user_default, svMyTopUserIcon);
            //设置默认背景
            ivMyTopBg.setImageResource(R.drawable.ic_user_bg_default);
        }

        /**
         * 列表集合
         */
        list = new ArrayList<>();
        for (int i = 0; i < icons.length; i++) {
            MyListBean bean = new MyListBean();
            bean.setIcon(icons[i]);
            bean.setName(names[i]);
            list.add(bean);
        }
        //我的功能列表
        adapter = new MyListAdapter(MyActivity.this, list);
        rvMyList.setLayoutManager(new FullyLinearLayoutManager(MyActivity.this, LinearLayoutManager.VERTICAL, false));
        rvMyList.setAdapter(adapter);
        //条目点击事件
        initItemClick();
    }

    @Override
    protected void getNotData() {

    }

    /**
     * 点击事件
     *
     * @param view
     */
    @OnClick({R.id.layout_my_top, R.id.iv_my_identity,R.id.btn_exit_login})
    public void OnClick(View view) {
        switch (view.getId()) {
            case R.id.layout_my_top:           //头像区域点击事件
                Bundle bundle = new Bundle();
                /**
                 * 重新获取用户信息
                 */
                Gson gson = new Gson();
                UserBean my = gson.fromJson(mACache.getAsJSONObject(Constant.USER) + "", UserBean.class);

                if (stuSimpleFlag)
                    bundle.putString(Constant.USER_ICON,my.getImg_url());
                else
                    bundle.putString(Constant.USER_ICON,"");

                JumperUtils.JumpTo(MyActivity.this, SimpleCropActivity.class,bundle);
                break;
            case R.id.iv_my_identity:          //切换身份
                new MaterialDialog.Builder(MyActivity.this)
                        .title("切换")
                        .content("是否切换当前身份？")
                        .negativeText("取消")
                        .negativeColor(Color.parseColor("#a9a8ad"))
                        .positiveText("确认")
                        .onPositive(new MaterialDialog.SingleButtonCallback() {
                            @Override
                            public void onClick(MaterialDialog dialog, DialogAction which) {

                                //清空 当前保存的身份
                                mACache.put(Constant.USER_IDENTITY, "");
                                //跳转
                                JumperUtils.JumpTo(MyActivity.this, IdentityActivity.class);
                                //通知 退出主页面
                                EventBus.getDefault().post("exit", Constant.EXIT_MAIN);
                            }
                        }).show();
                break;
            case R.id.btn_exit_login:          //退出登录
                new MaterialDialog.Builder(MyActivity.this)
                        .title("退出")
                        .titleColor(Color.parseColor("#EC5B5B"))
                        .content("是否确认退出登录？")
                        .negativeText("取消")
                        .negativeColor(Color.parseColor("#a9a8ad"))
                        .positiveText("确认")
                        .positiveColor(Color.parseColor("#EC5B5B"))
                        .onPositive(new MaterialDialog.SingleButtonCallback() {
                            @Override
                            public void onClick(MaterialDialog dialog, DialogAction which) {
                                //跳转
                                JumperUtils.JumpTo(MyActivity.this, LoginActivity.class);
                                //通知 退出主页面
                                EventBus.getDefault().post("exit", Constant.EXIT_MAIN);
                            }
                        }).show();

                break;
        }
    }

    //条目点击事件
    private void initItemClick() {
        adapter.setOnItemClickListener(new BaseRecyleViewAdapter.OnRecyclerViewItemClickListener() {
            @Override
            public void onItemClick(View view, int position) {
                switch (position) {
                    case 0:         //个人信息
                        JumperUtils.JumpTo(MyActivity.this, MyInfoActivity.class);
                        break;
                    case 1:         //密码修改
                        JumperUtils.JumpTo(MyActivity.this, ModifyPwdActivity.class);
                        break;
                    case 2:         //历史推送

                        break;
                    case 3:         //课表查询
                        JumperUtils.JumpTo(MyActivity.this, ScheduleDayActivity.class);
                        break;
                    case 4:         //奖学金申请
                        JumperUtils.JumpTo(MyActivity.this, SupportMyApplyActivity.class);
                        break;
                    case 5:         //入党申请查看
                        JumperUtils.JumpTo(MyActivity.this, PartyApplySeeActivity.class);
                        break;
                    case 6:         //我的请假
                        JumperUtils.JumpTo(MyActivity.this, MyLeaveActivity.class);
                        break;
                }
            }
        });
    }

    /**
     * 设置 http 过来的 图片
     * Ps：设置头像与毛玻璃背景
     */
    public void initSetHttpUserIcon(final String url) {
        //头像
        if (url != null && !url.equals("")) {
            //设置头像
            svMyTopUserIcon.setImageURI(Uri.parse(url));
            /**
             * 网络请求 设置背景图片
             */
            /**
             *  1.添加 图片地址到裁剪 控件上
             *  2.新建线程加载图片信息，发送到消息队列中
             */
            new Thread(MyIconBgTask).start();
        } else {
            ToastUtils.showShort(MyActivity.this, "设置图片出错！");
        }
    }
    //网络 请求过来的数据 添加用户背景 图片到控件上
    private Handler MyIconBgHandle = new Handler() {
        public void handleMessage(Message msg) {
            if (msg.what == 0){
                 /*
                 *设置背景毛玻璃效果
                 */
                //对Bitmap进行模糊化处理，第一个参数代表原始Bitmap，第二个参数代表模糊半径,半径越大，处理后的图片就越模糊
                if (msg.obj != null){
                    Bitmap bm = NativeStackBlur.process((Bitmap) msg.obj, 10);
                    ivMyTopBg.setImageBitmap(bm);
                }
            }
        };
    };
    /**
     * 网络 请求过来的数据 添加用户背景 执行 事件
     */
    Runnable MyIconBgTask = new Runnable() {
        @Override
        public void run() {
            Message msg = new Message();
            msg.what = 0;
            msg.obj = ImageUtils.getHttpBitmap(stuIconUrl);
            MyIconBgHandle.sendMessage(msg);
        }
    };

    /**
     * 设置 裁剪返回图片
     * ps：设置头像与毛玻璃背景
     */
    public void initSetUpUserIcon(String icon) {
        //头像
        if (icon != null && !icon.equals("")) {
            //获取 Uri
            Uri userIconUri = Uri.parse(icon);
            //设置头像
            FrescoUtils.loadAvatar(userIconUri, svMyTopUserIcon);
            /**
             * Uri 转换为 bitMap
             */
            try {
                Bitmap bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), userIconUri);
                 /*
                 *设置背景毛玻璃效果
                 */
                //对Bitmap进行模糊化处理，第一个参数代表原始Bitmap，第二个参数代表模糊半径,半径越大，处理后的图片就越模糊
                Bitmap bm = NativeStackBlur.process(bitmap, 10);
                ivMyTopBg.setImageBitmap(bm);
            } catch (IOException e) {
                e.printStackTrace();
            }

        } else {
            ToastUtils.showShort(MyActivity.this, "设置图片出错！");
        }
    }

    /**
     * 获取裁剪 新的图片 在 内存 中所保存的数据
     */
    @Subscriber(tag = Constant.SIMPLE_USER_ICON)
    public void initAddress(String userNewIcon) {
        //设置图片数据
        initSetUpUserIcon(userNewIcon);
        stuSimpleFlag = true;
    }

    @Override
    protected void onDestroy() {
        ButterKnife.unbind(this);
        EventBus.getDefault().unregister(this);
        finish();
        //销毁handler
        time_handler.removeCallbacks(time_runnable);
        MyIconBgHandle.removeCallbacks(MyIconBgTask);
        super.onDestroy();
    }
}
